/*
 * @Descripttion: 
 * @version: 
 * @Author: HuangJunren
 * @Date: 2020-07-22 11:08:32
 * @LastEditors: HuangJunren
 * @LastEditTime: 2020-07-23 09:46:20
 */ 
#ifndef _SPDLOG_DEFINE_H_
#define _SPDLOG_DEFINE_H_

//log文件夹根目录
#define LOG_ROOT_PATH "/home/CMS"
#define LOG_ROOT_NAME "logs"

//服务名称

#define SERVER_CMS_LOGS      "spd_CMS_Logs"
#define SERVER_MUSERVER_LOGS "spd_MUSERVER_Logs"
#define SERVER_SIP_LOGS      "spd_SIP_Logs"

//返回值类型
#define  SPD_COMMON_SUCCEED                (0)                  /* (LONG)通用错误码宏定义，值为0，表示成功 */
#define  SPD_COMMON_FAIL                   (-1)                 /* (LONG)通用错误码宏定义，值为-1，表示一般错误 */
#define  SPD_COMMON_INVAILD                (-2)                 /* (LONG)通用错误码宏定义，值为-2，表示无效参数 */

//log 类型

//spdlog用_mt(多线程)和_st(单线程)后缀标识sink是否是线程安全
//单线程的sink不可以在多线程中使用，它的速度会更快，因为没有锁竞争

typedef enum
{
	M_SPDLOG_LOG_TYPE_none               = -1,
    M_SPDLOG_LOG_TYPE_basic_logger_mt    = 0 , //无限制增长log类型（多线程版本）
    M_SPDLOG_LOG_TYPE_basic_logger_st    = 1 , //无限制增长log类型（单线程版本）
    M_SPDLOG_LOG_TYPE_rotating_logger_mt = 2 ,  //循环log，以某一个设置大小为准的单个log文件，超出循环次数，则覆盖最古老的log文件（多线程版本）
    M_SPDLOG_LOG_TYPE_rotating_logger_st = 3 ,  //循环log，以某一个设置大小为准的单个log文件，超出循环次数，则覆盖最古老的log文件（单线程版本）
    M_SPDLOG_LOG_TYPE_daily_logger_mt    = 4 ,  //日期log，每天在一个特别的时间创建一个新的日志文件，并在文件名字上添加一个时间戳（多线程版本）
    M_SPDLOG_LOG_TYPE_daily_logger_st    = 5 ,  //日期log，每天在一个特别的时间创建一个新的日志文件，并在文件名字上添加一个时间戳（单线程版本）
    M_SPDLOG_LOG_TYPE_stdout_log_mt      = 6 ,  //输出到stdout的log类型（多线程版本）
    M_SPDLOG_LOG_TYPE_stdout_log_st      = 7 ,  //输出到stdout的log类型（单线程版本）
    M_SPDLOG_LOG_TYPE_ostream_log_mt     = 8 ,  //输出到ostream中的log类型（多线程版本）
    M_SPDLOG_LOG_TYPE_ostream_log_st     = 9 ,  //输出到ostream中的log类型（单线程版本）
    M_SPDLOG_LOG_TYPE_null_sink_st       = 10   //会丢弃所有到它的日志
}SPDLOG_LOG_TYPE;

typedef enum{
    M_spdlog_isnot_async = 0,
    M_spdlog_is_async    = 1
}SPDLOG_ASYNC_TYPE;

typedef enum{
    M_spdlog_isnot_GLOBAL = 0,
    M_spdlog_is_GLOBAL    = 1
}SPDLOG_GLOBAL_TYPE;

//log级别
#define _SPDLOG_LEVEL_NLEVELS -1
#define _SPDLOG_LEVEL_TRACE 0
#define _SPDLOG_LEVEL_DEBUG 1
#define _SPDLOG_LEVEL_INFO 2
#define _SPDLOG_LEVEL_WARN 3
#define _SPDLOG_LEVEL_ERROR 4
#define _SPDLOG_LEVEL_CRITICAL 5
#define _SPDLOG_LEVEL_OFF 6

//设置激活log级别
#define _SPDLOG_ACTIVE_LEVEL _SPDLOG_LEVEL_INFO

// Log level enum
typedef enum
{
    M_spdlog_n_levels = _SPDLOG_LEVEL_NLEVELS,
    M_spdlog_trace = _SPDLOG_LEVEL_TRACE,
    M_spdlog_debug = _SPDLOG_LEVEL_DEBUG,
    M_spdlog_info = _SPDLOG_LEVEL_INFO,
    M_spdlog_warn = _SPDLOG_LEVEL_WARN,
    M_spdlog_err = _SPDLOG_LEVEL_ERROR,
    M_spdlog_critical = _SPDLOG_LEVEL_CRITICAL,
    M_spdlog_off = _SPDLOG_LEVEL_OFF
}_SPDLOG_LEVEL_TYPE;

#endif